package cn.lili.modules.distribution.service;

import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.distribution.entity.dos.Distribution;
import cn.lili.modules.distribution.entity.dto.DistributionApplyDTO;
import cn.lili.modules.distribution.entity.dto.DistributionSearchParams;
import cn.lili.modules.distribution.entity.vos.DistributionVO;
import cn.lili.modules.distribution.entity.vos.QualificationCheckVO;
import cn.lili.modules.member.entity.vo.NumberOfOwners;
import cn.lili.modules.order.order.entity.vo.OrderItemFlowUserVO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;


/**
 * 分销员业务层
 *
 * @author pikachu
 * @since 2020-03-14 23:04:56
 */
public interface DistributionService extends IService<Distribution> {

    /**
     * 获取分销员分页列表
     *
     * @param distributionSearchParams 分销员
     * @param page                     分页
     * @return
     */
    Page<Distribution> distributionPage(DistributionSearchParams distributionSearchParams, PageVO page);

    /**
     * 分页获取-分销员/店主列表
     *
     * @param distributionSearchParams
     * @param page
     * @return
     */
    Page<Distribution> distributionPage1(DistributionSearchParams distributionSearchParams, PageVO page);

    /**
     * 获取某个店主的直推,间推佣金收益情况
     *
     * @param
     * @return
     */
    List<Distribution> selectDisLowerAndLowerSubComissByParentId(String memberId, String flowTime, String nickName);

    /**
     * 获取当前登录的会员的分销员信息
     *
     * @return
     */
    Distribution getDistribution();

    /**
     * 提交分销申请
     *
     * @param distributionApplyDTO 分销申请DTO
     * @return 分销员
     */
    Distribution applyDistribution(DistributionApplyDTO distributionApplyDTO);

    /**
     * 审核分销申请
     *
     * @param id     分销员ID
     * @param status 审核状态
     * @return 操作状态
     */
    boolean audit(String id, String status);

    Page<OrderItemFlowUserVO> distributionOrder(Integer page, Integer limit);

    /**
     * 清退分销员
     *
     * @param id 分销员ID
     * @return 操作状态
     */
    boolean retreat(String id);

    /**
     * 恢复分销员
     *
     * @param id 分销员ID
     * @return 操作状态
     */
    boolean resume(String id);

    /**
     * 绑定会员的分销员关系
     *
     * @param distributionId 分销员ID
     */
    void bindingDistribution(String distributionId);

    /**
     * 检查分销设置开关
     */
    void checkDistributionSetting();

    void updateDistributionAmount();

    ResultMessage<Object> withdraw(DistributionSearchParams distributionSearchParams);

    ResultMessage<Object> auditWithdraw(String id, String auditStatus, String remark);

    /**
     * 能否申请成为分销员
     *
     * @return true / false
     */
    Boolean isApplyDistribution();

    /**
     * 根据memberId查询店主/分销员信息
     *
     * @param memberId
     * @return
     */
    Distribution selectDistributionById(String memberId);

    /**
     * 获取城主资格校验
     */
    QualificationCheckVO qualificationCheck();

    /**
     * 搜索店主
     * @param keyword
     * @return
     */
    List<Distribution> getListByName (String keyword);

    /**
     * 根据userid查询已通过的分销员
     * @param memberId
     * @return
     */
    Distribution selectDistributionByMemberId(String memberId);

    /**
     * 运营中心 --》 店主列表
     */
    IPage<DistributionVO> shopkeeperPage(DistributionVO distributionVO);


    NumberOfOwners numberOfOwners(Integer type);

    NumberOfOwners shopOwnersTurnover(Integer type);

    LambdaQueryWrapper<Distribution> createQueryWrapper(DistributionVO distributionVO);

    /**
     * 修改店主信息
     */
    ResultMessage<Object> updateDistributionInfo(Distribution info);
}

 